package 反射;

import java.lang.reflect.Constructor;
/*
Java通过反射机制调用某个类的方法,步骤所用方法如下：
1. forName()   返回给定串名相应的Class对象。
2. getMethod()  返回当前Class对象表示的类或接口的指定的公有成员方法对象。
3. newInstance()   创建类的新实例。
*/
//调用某个类的方法
import java.lang.reflect.Method;
public class 调用类的方法 {
    public static void main(String[] args) throws Exception {
        Class<?> clazz = Class.forName("反射.调用类的方法");
        // 调用TestReflect类中的reflect1方法
        Method method = clazz.getMethod("reflect1");
        method.invoke(clazz.newInstance());
        // Java 反射机制 - 调用某个类的方法1.
        // 调用TestReflect的reflect2方法
        Method method1 = clazz.getMethod("reflect2", int.class, String.class);
        method1.invoke(clazz.newInstance(), 20, "张三");
        // Java 反射机制 - 调用某个类的方法2.
        // age -> 20. name -> 张三
        
        Class<?> cls=调用类的方法.class;
        Constructor<?> con=cls.getDeclaredConstructor();
        method.invoke(con.newInstance());
        
        method1=cls.getMethod("reflect2", int.class,String.class);
        method1.invoke(con.newInstance(), 20,"张三");
    }
    public void reflect1() {
        System.out.println("Java 反射机制 - 调用某个类的方法1.");
    }
    public void reflect2(int age, String name) {
        System.out.println("Java 反射机制 - 调用某个类的方法2.");
        System.out.println("age -> " + age + ". name -> " + name);
    }
}